package com.lxl.dao.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.lxl.dao.PostDAO;
import com.lxl.model.Post;

/**
 * 帖子_帖子DAO的实现
 * 
 * @author 刘星鹭
 * @Email liuxinglumail@163.com
 * @version 创建时间： 2014年9月9日 下午4:01:05
 */
@Transactional
@Repository("postDAO")
public class PostDAOImpl implements PostDAO {
    @Resource
    SessionFactory sessionFactory;// 注入会话工厂

    private String sqlFromPost = "from Post";

    /**
     * 添加帖子
     * 
     * @param post
     *            帖子
     */
    @Override
    public void add(Post post) {
        sessionFactory.getCurrentSession().persist(post);
    }

    /**
     * 删除帖子
     * 
     * @param post
     *            帖子
     */
    @Override
    public void delete(Post post) {
        sessionFactory.getCurrentSession().delete(post);
    }

    /**
     * 更新帖子
     * 
     * @param oldPost
     *            旧帖子
     * @param newPost
     *            新帖子
     */
    @Override
    public void update(Post oldPost, Post newPost) {
        delete(oldPost);
        add(newPost);
    }

    /**
     * 通过帖子号查找帖子
     * 
     * @param postNo
     *            帖子号
     * @return 帖子
     */
    @Override
    public Post find(Integer postNo) {
        return (Post) sessionFactory.getCurrentSession()
                .get(Post.class, postNo);
    }

    /**
     * 列出所有帖子
     * 
     * @return 所有帖子
     */
    @Override
    @SuppressWarnings("unchecked")
    public List<Post> list() {
        return sessionFactory.getCurrentSession().createQuery(sqlFromPost)
                .list();
    }

    /**
     * 列出当前页面10个帖子
     * 
     * @param start
     *            页面号
     * @return 当前页面10个帖子
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<Post> listTen(int start) {
        List<Post> list = sessionFactory.getCurrentSession()
                .createQuery("from Post order by post_title asc").list();
        if (list.size() <= 10) {
            return list;
        } else if (start == 1) {
            return list.subList(0, 10);
        } else if (list.size() - 10 * (start - 1) < 10) {
            return list.subList(10 * (start - 1), list.size());
        }
        return list.subList(10 * (start - 1), 10 * (start - 1) + 10);
    }

    /**
     * 计算总页数
     * 
     * @return 总页数
     */
    @SuppressWarnings("unchecked")
    @Override
    public int pageCount() {
        List<Post> list = sessionFactory.getCurrentSession()
                .createQuery(sqlFromPost).list();
        if (list.size() % 10 == 0) {
            return list.size() / 10;
        }
        return list.size() / 10 + 1;
    }
}
